/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ar.com.remiseria.dao;

import ar.com.remiseria.entities.Chofer;
import ar.com.remiseria.entities.Viaje;
import ar.com.remiseria.utils.Constantes;
import ar.com.remiseria.utils.HibernateUtils;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author mcvalls
 */
public class ViajeDAO extends GenericDAO{

    public List<Viaje> getViajesByChoferAsignado(Chofer chofer) throws HibernateException{
        Session session = HibernateUtils.getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        
        Criteria criteria = session.createCriteria(Viaje.class);
        criteria.add(Restrictions.eq("choferAsignado", chofer));
        
        List<Viaje> losViajes = (List<Viaje>)criteria.list();
        tx.commit();
        
        return losViajes;
    }

    
//    public Viaje saveNew(Viaje viaje) throws HibernateException {
//        
//        Session session = HibernateUtils.getSessionFactory().getCurrentSession();
//        Transaction tx = session.beginTransaction();
//        
//        session.save(viaje);
//        
//        tx.commit();
//        return viaje;
//        
//    }

    public List<Viaje> getAllOrderByFecha() throws HibernateException{
        Session session = HibernateUtils.getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        
        Criteria criteria = session.createCriteria(Viaje.class);
        criteria.addOrder(Order.desc("fechaDeRecogida"));
        
        List<Viaje> losViajes = (List<Viaje>)criteria.list();
        tx.commit();
        
        return losViajes;
    }
    
    public List<Viaje> getAllOrderByFecha(int start) throws HibernateException{
        Session session = HibernateUtils.getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        
        Criteria criteria = session.createCriteria(Viaje.class);
        criteria.addOrder(Order.desc("fechaDeRecogida"));
        criteria.setFirstResult(start);
        criteria.setMaxResults(Constantes.PAG_MAX_RESULTS);
        
        List<Viaje> losViajes = (List<Viaje>)criteria.list();
        tx.commit();
        
        return losViajes;
    }

    public List<Viaje> getViajesByFiltro(String filtro, String palabraClave) throws HibernateException{
        
        Session session = HibernateUtils.getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        
        String query = "from Viaje "+
                "where ";
        if(filtro.equals("domicilioOrigen") || filtro.equals("domicilioDestino")){
            query+= filtro+".calle like '%"+palabraClave+"%' or ";
            query+= filtro+".numero like '%"+palabraClave+"%' or ";
            query+= filtro+".codigoPostal like '%"+palabraClave+"%' or ";
            query+= filtro+".localidad like '%"+palabraClave+"%' or ";
            query+= filtro+".provincia like '%"+palabraClave+"%'";
        }else if(filtro.equals("clienteSolicitante")){
            query+= filtro+".nombre like '%"+palabraClave+"%' or ";
            query+= filtro+".apellido like '%"+palabraClave+"%' or ";
            query+= filtro+".telefono like '%"+palabraClave+"%' or ";
            query+= filtro+".documento.numero like '%"+palabraClave+"%'";
        }else if(filtro.equals("choferAsignado")){
            query+= filtro+".apellido like '%"+palabraClave+"%'";
        }else if(filtro.equals("autoAsignado")){
            query+= filtro+".patente like '%"+palabraClave+"%'";
        }else{
            query+= filtro+" like '%"+palabraClave+"%'";
        }
        query+=" order by fechaDeRecogida desc";
          
        
//        Query query1 = session.createQuery("from Viaje "
//                + "where "+filtro+" like '%"+palabraClave+"%'");
        
        List<Viaje> losViajes = (List<Viaje>) session.createQuery(query).list();
        if(losViajes != null && !losViajes.isEmpty()){
            for(Viaje viaje : losViajes){
                System.out.println(viaje.getClienteSolicitante()+" "+viaje.getCodigo());
            }
        }
        tx.commit();
        
        return losViajes;
    }
    
    
    
}
